/*
* Copyright 2013 Yoshihiro Miyama
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.kyakujin.android.autoeco.ui;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.LoaderManager;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
import android.widget.ToggleButton;
import com.kyakujin.android.autoeco.Conf;
import com.kyakujin.android.autoeco.Logger;
import com.kyakujin.android.autoeco.R;
import com.kyakujin.android.autoeco.db.AutoEcoContract.BatteryQuery;
import com.kyakujin.android.autoeco.db.AutoEcoContract.BatteryTbl;
import com.kyakujin.android.autoeco.db.dao.BatteryDAO;
import com.kyakujin.android.autoeco.db.dao.BatteryModel;
import com.kyakujin.android.autoeco.service.BatteryService;
/**
* バッテリー連動機能の設定画面フラグメント
*/
public class BatteryFragment extends Fragment implements LoaderCallbacks<Cursor> {
private final String TAG = Conf.APP_NAME + ":" + this.getClass().getSimpleName();
private int mCurrentBatteryId = 0;
private LoaderManager mManager;
private SeekBar mSeekBar;
private TextView mThreshold;
private Activity mActivity;
private BatteryModel mModel;
private ToggleButton mToggle;
public static BatteryFragment newInstance() {
return new BatteryFragment();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_battery_setting, container,
false);
mCurrentBatteryId = getArguments().getInt(Conf.SHARED_BATTERYID);
mModel = new BatteryModel();
mActivity = getActivity();
mThreshold = (TextView) v.findViewById(R.id.textThreshold);
mSeekBar = (SeekBar) v.findViewById(R.id.seekBattery);
mSeekBar.setMax(100);
mSeekBar.setProgress(30);
mSeekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
// トラッキング開始時にコールされる
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
Logger.d(TAG, "onStartTrackingTouch(): " +
String.valueOf(seekBar.getProgress()));
mThreshold.setText(String.valueOf(seekBar.getProgress()).concat("%"));
}
// トラッキング中にコールされる
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) {
Logger.d(TAG, "onProgressChanged(): " +
String.valueOf(progress) + ", " + String.valueOf(fromTouch));
mThreshold.setText(String.valueOf(seekBar.getProgress()).concat("%"));
}
// トラッキング終了時にコールされる
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
int progress = seekBar.getProgress();
Logger.v(TAG, "onStopTrackingTouch(): " + String.valueOf(progress));
mModel.setThreshold(progress);
mModel.setId(mCurrentBatteryId);
BatteryDAO dao = new BatteryDAO(mActivity);
dao.updateThreshold(mModel);
}
});
mToggle = (ToggleButton) v.findViewById(R.id.toggleBattery);
mToggle.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// トグルキーが変更された際にコールされる
BatteryDAO dao = new BatteryDAO(mActivity);
dao.updateEnabled(mCurrentBatteryId, isChecked);
if (isChecked) {
//dispCautionDialog();
mActivity.startService(new Intent(mActivity, BatteryService.class));
} else {
mActivity.stopService(new Intent(mActivity, BatteryService.class));
}
// プリファレンスに登録
SharedPreferences pref =
mActivity.getSharedPreferences(Conf.PREF, Context.MODE_PRIVATE);
Editor e = pref.edit();
e.putInt(Conf.PREFKEY_BATTERYSRV_ENABLED, isChecked == true ? 1 : 0);
e.commit();
}
});
// DBから情報を取得してUIに反映
mManager = getLoaderManager();
mManager.restartLoader(BatteryQuery.LOADER_ID, null, this);
return v;
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle arg) {
switch (id) {
case BatteryQuery.LOADER_ID:
return new CursorLoader(getActivity(), Uri.withAppendedPath(BatteryTbl.CONTENT_URI,
String.valueOf(mCurrentBatteryId)), BatteryQuery.PROJECTION, null, null,
null);
default:
break;
}
return null;
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
switch (loader.getId()) {
case BatteryQuery.LOADER_ID:
getBatteryFromDB(data);
break;
default:
break;
}
}
@Override
public void onLoaderReset(Loader<Cursor> arg0) {
}
private void getBatteryFromDB(Cursor c) {
if (c != null && c.moveToFirst()) {
mModel.setId(c.getInt(BatteryQuery.Idx._ID.ordinal()));
mModel.setEnabled(c.getInt(BatteryQuery.Idx.ENABLED.ordinal()) == 1 ? true : false);
mModel.setThreshold(c.getInt(BatteryQuery.Idx.THRESHOLD.ordinal()));
mSeekBar.setProgress(mModel.getThreshold());
mThreshold.setText(c.getInt(BatteryQuery.Idx.THRESHOLD.ordinal()) + "%");
mToggle.setChecked(c.getInt(BatteryQuery.Idx.ENABLED.ordinal()) == 1 ? true : false);
}
}
// Below method is not used.
boolean mIsEnabledOK;
private void dispCautionDialog() {
String[] items = new String[] {mActivity.getResources().getString(R.string.desc_nextdisp)};
Builder builder = new AlertDialog.Builder(mActivity);
builder.setMessage(mActivity.getResources().getString(R.string.desc_battery_setting_enable_caution));
builder.setTitle(mActivity.getResources().getString(R.string.desc_caution));
builder.setIcon(mActivity.getResources().getDrawable(android.R.drawable.ic_dialog_alert));
builder.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mIsEnabledOK = true;
}
});
builder.setNeutralButton(mActivity.getResources().getString(R.string.desc_nextdisp),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mIsEnabledOK = true;
}
});
builder.create();
builder.show();
}
}